#include "../head.h"

/*触摸屏功能定义模块*/

void touch_init()
{
    int fd;
    fd = open("/dev/input/event0", O_RDWR);
}


//获取坐标
struct cor get_touch()
{

    struct input_event ev;
    int fd;
    fd = open("/dev/input/event0", O_RDWR);

    int x = -1, y = -1;
    while (1)
    {
        // 打开触摸文件
        read(fd, &ev, sizeof(ev));
        // 解析坐标
        if (ev.type == EV_ABS) // 触摸事件
        {
            if (ev.code == ABS_X)
            {
                x = ev.value;
            }
            else if (ev.code == ABS_Y)
            {
                y = ev.value;
            }
            else if (ev.code == ABS_PRESSURE && ev.value == 0)
            {
                break;
            }
        }
        else if (ev.type == EV_KEY && ev.value == 0)
        {
            break;
        }
    }
    //printf("X,Y >>> Location : (%d , %d)\n", x,y);
    close(fd);
    struct cor res = {x, y};

    return res;
}

//返回方向
int get_direction()
{
    struct input_event ev;
    int fd;
    fd = open("/dev/input/event0", O_RDWR);
    if (fd == -1)
    {
        perror("open fb0 error"); // 打印错误信息
        return -1;
    }
    int x = -1, y = -1;
    int begin1 = -1, begin2 = -1, end1 = -1, end2 = -1;
    int i = 0, j = 0;
    while (1)
    {
        // 打开触摸文件
        read(fd, &ev, sizeof(ev));
        // 解析坐标
        if (ev.type == EV_ABS) // 触摸事件
        {
            if (ev.code == ABS_X)
            {
                x = ev.value;
                end1 = ev.value;
                if (i == 0)
                {
                    begin1 = ev.value;
                }
                i++;
            }
            else if (ev.code == ABS_Y)
            {
                y = ev.value;
                end2 = ev.value;
                if (j == 0)
                {
                    begin2 = ev.value;
                }
                j++;
            }
            else if (ev.code == ABS_PRESSURE && ev.value == 0)
            {
                break;
            }
        }
        else if (ev.type == EV_KEY && ev.value == 0)
        {
            break;
        }
    }

    //printf("%d\n", x);
    //printf("%d\n", y);

    if (x >= 320 && x <= 400 && y >= 520 && y <= 600)
        return DES;
    if (x >= 630 && x <= 700 && y >= 520 && y <= 600)
        return ADD;
    if (x >= 0 && x <= 80 && y >= 520 && y <= 600)return EXIT;
    if (x >= 940 && x <= 1022 && y >= 520 && y <= 600)return REFRESH;

    // 右滑
    if (end1 - begin1 > 0 && abs(end1 - begin1) > abs(end2 - begin2))
    {
        return RIGHT;
    }
    // 左滑
    if (end1 - begin1 < 0 && abs(end1 - begin1) > abs(end2 - begin2))
    {
        return LEFT;
    }
    // 下滑
    if (end2 - begin2 > 0 && abs(end1 - begin1) < abs(end2 - begin2))
    {
        return DOWN;
    }
    // 上滑
    if (end2 - begin2 < 0 && abs(end1 - begin1) < abs(end2 - begin2))
    {
        return UP;
    }
    printf("Slip invalid\n");       //滑动无效
}


// int get_direction(int x, int y, int x0, int y0)
// {
//     int dx = x - x0;
//     int dy = y - y0;

//     if (abs(dx) > abs(dy))
//     {
//         if (dx > 10)
//             return 1; //向左
//         else if (dx < -10)
//             return 2; // 向右
//     }
//     else
//     {
//         if (dy > 10)
//             return 3; // 向上
//         else if (dy < -10)
//             return 4; // 向下
//     }
//     return 0;
// }

// 触碰获取坐标

// int get_touch()
// {
//     //打开文件
//     int fd = open("/dev/input/event0", O_RDWR);
//     if (fd == -1)
//     {
//         perror("open error:"); 
//         return -1;             
//     }

//     // 初始坐标、结束坐标
//     int x = -1, y = -1;
//     int x0 = -1, y0 = -1;

//     int direction = 0;
//     struct input_event ev;
//     while (1)
//     {
//         read(fd, &ev, sizeof(ev));

//         if (ev.type == EV_ABS) 
//         {
//             if (ev.code == ABS_X) // 获取当前x坐标
//             {
//                 if (x == -1)
//                 {
//                     x = ev.value;
//                 }
//                 else
//                 {
//                     x0 = ev.value;
//                 }
//             }
//             else if (ev.code == ABS_Y) //获取当前y坐标
//             {
//                 if (y == -1)
//                 {
//                     y = ev.value;
//                 }
//                 else
//                 {
//                     y0 = ev.value;
//                 }
//             }
//             else if (ev.code == ABS_PRESSURE && ev.value == 0) // 结束触碰
//             {
//                 break;
//             }
//         }
//         else if (ev.type == EV_KEY && ev.value == 0) // 结束按压
//         {
//             break;
//         }

//         if (x != -1 && x0 != -1 && y != -1 && y0 != -1)
//         {
//             direction = get_direction(x, y, x0, y0);
//             break;
//         }
//         //sleep(1.5);
//     }
//     close(fd);

//     return direction; // 返回方向值
// }


//获取坐标
// int get_touch_type()
// {
//     int fd = open("/dev/input/event0", O_RDWR);
//     if (fd == -1)
//     {
//         perror("open error:"); 
//         return -1;         
//     }

//     int x = -1, y = -1;
//     struct input_event ev;
//     while (1)
//     {
//         read(fd, &ev, sizeof(ev));
//         if (ev.type == EV_ABS) 
//         {
//             if (ev.code == ABS_X) 
//             {

//                 x = ev.value;
//             }
//             else if (ev.code == ABS_Y)
//             {

//                 y = ev.value;
//             }
//             else if (ev.code == ABS_PRESSURE && ev.value == 0)
//             {
//                 break;
//             }
//         }
//         else if (ev.type == EV_KEY && ev.value == 0)
//         {

//             break;
//         }
//     }
//     printf("x = %d\n", x);
//     printf("y = %d\n", y);

//     close(fd);
//     return 1;
// }
